package ca.etsmtl.log720.lab1;

import org.omg.PortableServer.POA;

public class BanqueReactionsImpl extends BanqueReactionsPOA {

	private CollectionReactionImpl _reactions;
	
	public BanqueReactionsImpl() {
		_reactions = new CollectionReactionImpl();
	}
	
  	public CollectionReaction trouverReactionsParDossier(Dossier dossier) {
    	
		try {
			CollectionReactionImpl reactions = new CollectionReactionImpl();
	  		
	  		for(int idReaction : dossier.getListeReaction()) {
	  			reactions.getListeReactions().add(this.trouverReactionParIdImpl(idReaction));
	  		}
	  		
			// Recuperer le POA cree dans le serveur
			POA rootpoa = ServerVoiture._poa;

			// Activer l'objet et retourne l'objet CORBA
			org.omg.CORBA.Object obj = rootpoa
					.servant_to_reference(reactions);

			// Retourner une Collection de dossiers
			return CollectionReactionHelper.narrow(obj);
			
		} catch (Exception e) {
			System.out.println("Erreur retour de l'objet CollectionReaction : "	+ e);
			return null;
		}
	}
	
  	public Reaction trouverReactionParId(int idReaction) {
    	try {
    		ReactionImpl r = trouverReactionParIdImpl(idReaction);

			// Recuperer le POA cree dans le serveur
			POA rootpoa = ServerVoiture._poa;

			// Activer l'objet et retourne l'objet CORBA
			org.omg.CORBA.Object obj = rootpoa
				.servant_to_reference(r);

			// Retourner une Collection de dossiers
			return ReactionHelper.narrow(obj);
				
		} catch (Exception e) {
			System.out.println("Erreur retour de l'objet Reaction : "	+ e);
			return null;
		}
	}
	
  	private ReactionImpl trouverReactionParIdImpl(int idReaction) {
		for(ReactionImpl r : _reactions.getListeReactions()) {
			if(r.id() == idReaction) { 
				return r;
			}
		}
		return null;
	}
	
	public void ajouterReaction(String description, int gravite) {
		
		ReactionImpl nouvelleReaction = new ReactionImpl(description, gravite);
		_reactions.getListeReactions().add(nouvelleReaction);
	}
	
	public CollectionReaction reactions() {
		try {
			// Recuperer le POA cree dans le serveur
			POA rootpoa = ServerVoiture._poa;

			// Activer l'objet et retourne l'objet CORBA
			org.omg.CORBA.Object obj = rootpoa
					.servant_to_reference(_reactions);

			// Retourner une Collection de cours
			return CollectionReactionHelper.narrow(obj);
		} catch (Exception e) {
			System.out.println("Erreur retour de l'objet CollectionReaction : "
					+ e);
			return null;
		}
    }
	
}
